#!/bin/bash
#---------HEADER--------------------------------------------------------------|
#DATA:
# 01 dezembro 2017 
#AUTOR:
#	Jefferson Rocha <lrcjefferson@gmail.com>
#
#PROGRAMA:
#	Slocal - Manutenção de pacotes locais em rede.
#
#CHANGELOG:
#	(v1.0) 01/12/2017 - Jefferson rocha
#	 - Lançamento
#
#	(v1.1) 01/12/2017 - Jefferson Rocha
#	 - Retirado bug do 'PACKAGE.TXT' que ficava na lista no select.
#	 - Retirado opção 'install' em linha
#	 - Adicionado opção de sincronizar pacotes.
#
#MODO DE USO:
#
#
#-----------------------------------------------------------------------------|

#-------CONFIGURAÇÕES-----#
PROGRAMA="slocal v1.1 - 01/12/2017"       # Nome e versão do programa
diretorio="/var/www/htdocs/slackware14.2" # DIRETORIO DOS PACOTES no servidor
URL="192.168.0.4/slackware14.2"           # URL DO SERVIDOR
sincronizar="/home/slackjeff/Downloads"   # Local onde os novos pacotes ficam
nome_do_hospedeiro="darkstar"             # Nome do Hospedeiro
root=$(id -u)


#--------FUNÇÕES-----------#
hospedeira(){
	PACOTES=$(ls "$diretorio" > $diretorio/PACKAGE.txt)	# Listagem do pascotes
}

baixar_package_txt(){
	curl "$URL/PACKAGE.txt" > PACKAGE.txt
	mv PACKAGE.txt /tmp
}

#-------VERIFICAÇÕES INICIAIS-------#
[ "$root" -ne "0" ] && echo "Favor logar como root." && exit 1 	# É root?

# Obtendo pacotes no diretorio raiz, máquina hospedeira.
[ -d "$diretorio" ] && hospedeira	# Chamada função hospedeira

#-------INICIO-----------#

# Menu principal
while [ -n "$1" ]; do
	case $1 in
		update) baixar_package_txt ;;	# Update do PACKAGE.txt

		# Opção sync apenas para máquina HOSPEDEIRA dos pacotes.
		sync)
					if [ "$nome_do_hospedeiro" = "$(echo $HOSTNAME)" ]; then
						cp $sincronizar/*.t?z "$diretorio" \
						&& echo -e "\033[35;1mConcluido! Pacotes copiados para $diretorio\033[m"
					else
						echo -e "\033[31;1mSomente máquinas hospedeiras podem rodar este comando.\033[m"
						exit 1
					fi
		;;

		search)
			shift
			grep "^$1" /tmp/PACKAGE.txt	# procura, termos que comecem com a busca
			[ "$?" = "1" ] && echo -e "\033[31;1mPacote não encontrado, digite outro termo de busca.\033[m"
		;;

		select)	# Selecione e instale de uma vez!
					packs=$(cat "/tmp/PACKAGE.txt" | sed '/PACKAGE.txt/d')
					PS3=$'\033[34;1mSelecione um pacote para instalar: \033[m'
					select i in $packs "SAIR"; do
							[ "$i" = "SAIR" ] && exit 0
							wget -P "/tmp" "$URL/$i" 2>/dev/null && \
							upgradepkg --install-new "/tmp/$i"
							rm /tmp/${i:?echo "ERRO ao remover pacote do sistema."}	# Var nula dá erro!
					done
	 ;;

		help) cat << EOF
Opções disponiveis no $PROGRAMA.

 ------------------------------------------------------------
 | search |
 Localiza em 'linha' um pacote no repositorio local.

 EXEMPLO:
 # slocal search [Bb]re.ze
 breeze-icons-5.28.0-noarch-1alien.txz

 ------------------------------------------------------------
 | sync |
 Sincroniza pacotes de um determinado diretorio para
 o servidor.
 Este comando só pode ser executado na máquina hospedeira.

 ------------------------------------------------------------
 | select |
 Menu principal para escolher e instalar um pacote.

 ------------------------------------------------------------
 | update |
 Faz update do arquivo PACKAGE.txt, é importante,
 executar esta opção sempre que for sincronizado novos pacotes,
 no servidor!

 ------------------------------------------------------------

EOF
;;

		*) echo "Consulte slocal help para receber ajuda" ;;
esac
	shift
done
